package com.example.graphmovieapp.domain.dto;

import java.util.List;
import java.util.Objects;

/**
 * MovieDTO类，用于API数据传输
 * 
 * @author GraphMovieApp
 * @version 1.0
 */
public class MovieDTO {
    
    /**
     * 电影ID
     */
    private Long id;
    
    /**
     * 电影标题
     */
    private String title;
    
    /**
     * 发行年份
     */
    private Integer released;
    
    /**
     * 演员ID列表
     */
    private List<Long> actorIds;
    
    /**
     * 导演ID列表
     */
    private List<Long> directorIds;
    
    /**
     * 默认构造函数
     */
    public MovieDTO() {
    }
    
    /**
     * 带参数的构造函数
     * 
     * @param id 电影ID
     * @param title 电影标题
     * @param released 发行年份
     */
    public MovieDTO(Long id, String title, Integer released) {
        this.id = id;
        this.title = title;
        this.released = released;
    }
    
    /**
     * 获取电影ID
     * 
     * @return 电影ID
     */
    public Long getId() {
        return id;
    }
    
    /**
     * 设置电影ID
     * 
     * @param id 电影ID
     */
    public void setId(Long id) {
        this.id = id;
    }
    
    /**
     * 获取电影标题
     * 
     * @return 电影标题
     */
    public String getTitle() {
        return title;
    }
    
    /**
     * 设置电影标题
     * 
     * @param title 电影标题
     */
    public void setTitle(String title) {
        this.title = title;
    }
    
    /**
     * 获取发行年份
     * 
     * @return 发行年份
     */
    public Integer getReleased() {
        return released;
    }
    
    /**
     * 设置发行年份
     * 
     * @param released 发行年份
     */
    public void setReleased(Integer released) {
        this.released = released;
    }
    
    /**
     * 获取演员ID列表
     * 
     * @return 演员ID列表
     */
    public List<Long> getActorIds() {
        return actorIds;
    }
    
    /**
     * 设置演员ID列表
     * 
     * @param actorIds 演员ID列表
     */
    public void setActorIds(List<Long> actorIds) {
        this.actorIds = actorIds;
    }
    
    /**
     * 获取导演ID列表
     * 
     * @return 导演ID列表
     */
    public List<Long> getDirectorIds() {
        return directorIds;
    }
    
    /**
     * 设置导演ID列表
     * 
     * @param directorIds 导演ID列表
     */
    public void setDirectorIds(List<Long> directorIds) {
        this.directorIds = directorIds;
    }
    
    /**
     * 重写equals方法
     * 
     * @param o 比较对象
     * @return 是否相等
     */
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        MovieDTO movieDTO = (MovieDTO) o;
        return Objects.equals(id, movieDTO.id) && 
               Objects.equals(title, movieDTO.title) && 
               Objects.equals(released, movieDTO.released);
    }
    
    /**
     * 重写hashCode方法
     * 
     * @return 哈希值
     */
    @Override
    public int hashCode() {
        return Objects.hash(id, title, released);
    }
    
    /**
     * 重写toString方法
     * 
     * @return 字符串表示
     */
    @Override
    public String toString() {
        return "MovieDTO{" +
                "id=" + id +
                ", title='" + title + '\'' +
                ", released=" + released +
                '}';
    }
}